package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import POJO.Livro;


public class LivroDao {
	Connection c;
	
	public LivroDao ()
	{
		GenericDao gDao = new GenericDao();
		c = gDao.getConnection();
	}
	
	public void cadastraLivro(Livro l) throws SQLException{
		String sql = "INSERT INTO Livro (codEditora, titulo, codInstituicao, codAutor, assunto, qtdPaginas, " +
				     "statusLivro, ilustrado, isbn, codCurso) VALUES(?,?,?,?,?,?,?,?,?,?)";
		
		PreparedStatement ps = c.prepareStatement(sql);
		
		ps.setInt(1, l.getCodEditora());
		ps.setString(2, l.getTitulo());
		ps.setInt(3, l.getCodInstituicao());
		ps.setInt(4, l.getCodAutor());
		ps.setString(5, l.getAssunto());
		ps.setInt(6, l.getQtdPaginas());
		ps.setString(7, l.getStatus());
		ps.setString(8, l.getIlustrado());
		ps.setInt(9, l.getIsbn());
		ps.setInt(10, l.getCodCurso());
		
		ps.execute();
		ps.close();
		
	}
	
	public void atualizaLivro(Livro l) throws SQLException{
		String sql = "UPDATE Livro SET codEditora = ?, titulo = ?, codInstituicao = ?, codAutor = ?, " +
				     "assunto = ?, qtdPaginas = ?, statusLivro = ?, ilustrado = ?, isbn = ?, codCurso = ?" +
				     "WHERE codLivro = ?";
		System.out.println(l.getCodLivro());
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, l.getCodEditora());
		ps.setString(2, l.getTitulo());
		ps.setInt(3, l.getCodInstituicao());
		ps.setInt(4, l.getCodAutor());
		ps.setString(5, l.getAssunto());
		ps.setInt(6, l.getQtdPaginas());
		ps.setString(7, l.getStatus());
		ps.setString(8, l.getIlustrado());
		ps.setInt(9, l.getIsbn());
		ps.setInt(10, l.getCodCurso());
		ps.setInt(11, l.getCodLivro());
		ps.execute();
		ps.close();
	}
	
	public void removeLivro(Livro l) throws SQLException{
		String sql = "DELETE Livro WHERE codLivro = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, l.getCodLivro());
		ps.execute();
		ps.close();
	}
	
	public int GeraProximoCodigo() throws SQLException
	{
		int codigo = 100;
		String sql = "SELECT MAX (codLivro) + 1 AS codigo FROM Livro";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			codigo = rs.getInt("codigo");
		}
		rs.close();
		ps.close();
		return codigo;
	}
	
	public Livro ConsultaLivros(Livro l) throws SQLException
	{
		Livro livro = new Livro();
		String sql = "SELECT codLivro, codEditora, titulo, codInstituicao, codAutor, assunto, qtdPaginas, statusLivro, " +
				     "ilustrado, isbn, codCurso FROM Livro WHERE codLivro = ?";
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, l.getCodLivro());
		ResultSet rs = ps.executeQuery();
		if(rs.next())
		{
			livro.setCodLivro(rs.getInt("codLivro"));
			livro.setCodEditora(rs.getInt("codEditora"));
			livro.setTitulo(rs.getString("titulo"));
			livro.setCodInstituicao((rs.getInt("codInstituicao")));
			livro.setCodAutor(rs.getInt("codAutor"));
			livro.setAssunto(rs.getString("assunto"));
			livro.setQtdPaginas(rs.getInt("qtdPaginas"));
			livro.setStatus(rs.getString("statusLivro"));
			livro.setIlustrado(rs.getString("ilustrado"));
			livro.setIsbn(rs.getInt("isbn"));
			livro.setCodCurso(rs.getInt("codCurso"));
		}
		rs.close();
		ps.close();
		return livro;
	}
	
	public List<Livro> listaLivros() throws SQLException
	{
		List<Livro> lista = new ArrayList<Livro>();
		String sql = "SELECT * FROM Livro ORDER BY titulo";
		PreparedStatement ps = c.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next())
		{
			Livro l = new Livro();
			l.setCodLivro(rs.getInt("codLivro"));
			l.setCodEditora(rs.getInt("codEditora"));
			l.setTitulo(rs.getString("titulo"));
			l.setCodInstituicao((rs.getInt("codInstituicao")));
			l.setCodAutor(rs.getInt("codAutor"));
			l.setAssunto(rs.getString("assunto"));
			l.setQtdPaginas(rs.getInt("qtdPaginas"));
			l.setStatus(rs.getString("statusLivro"));
			l.setIlustrado(rs.getString("ilustrado"));
			l.setIsbn(rs.getInt("isbn"));
			l.setCodCurso(rs.getInt("codCurso"));
			lista.add(l);
		}
		rs.close();
		ps.close();
		return lista;
	}
	
	public String verificaStatusLivro(Livro l) throws SQLException
	{
		String status = "";
		
		String sql = "SELECT statusLivro as Status from Livro WHERE codLivro = ?";
		
		PreparedStatement ps = c.prepareStatement(sql);
		ps.setInt(1, l.getCodLivro());
		ResultSet rs = ps.executeQuery();
		while(rs.next())
		{
			status = rs.getString("Status");
		}
		rs.close();
		ps.close();
		
		
		return status;
				
	}
	
}
